Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #969 and implements the API from there, namely
Please look at the overall diff rather than the individual commits as I refactored it a bit.
I realize you may not want to merge this, but this is now in my forked version, so I thought I'd post it here anyway. There aren't actually that many changes. The main change to the existing code was replacing ShaderDescription as a direct member of SharedShader state with a shader_ptr instead.
The absolute time savings aren't massive but I think it's still worth it as my app may load 1000s of images as quickly as possible. I tested creating an instance of PixelShaderEffect (without realizing it) using some shader code which is not too complicated but does have a few constants. I found that on average, without the new caching code, it took 0.15ms to create each instance, whereas after registration, using the new code, it took 0.002ms to create each instance.